// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package history

import "github.com/GoogleCloudPlatform/khi/pkg/model/binarychunk"

type LogAnnotation interface {
	Priority() int
	Serialize(builder *binarychunk.Builder) (any, error)
}

type ResourceReferenceAnnotation struct {
	Path string
}

type SerializableResourceReferenceAnnotation struct {
	Type string                       `json:"type"`
	Path *binarychunk.BinaryReference `json:"path"`
}

var _ LogAnnotation = (*ResourceReferenceAnnotation)(nil)

func (a *ResourceReferenceAnnotation) Priority() int {
	return 10000
}

func (a *ResourceReferenceAnnotation) Serialize(builder *binarychunk.Builder) (any, error) {
	ref, err := builder.Write([]byte(a.Path))
	if err != nil {
		return nil, err
	}
	return &SerializableResourceReferenceAnnotation{
		Type: "resource_ref",
		Path: ref,
	}, nil
}

func NewResourceReferenceAnnotation(resourcePath string) *ResourceReferenceAnnotation {
	return &ResourceReferenceAnnotation{
		Path: resourcePath,
	}
}
